import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
import { getToken } from '@/utils/auth'

// 创建一个axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // 当跨域请求时发送cookie
  timeout: 5000 // 请求超时
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在请求被发送之前做些什么
    const token = store.getters.token
    if (token) {
      // let each request carry token
      // ['X-Token'] is a custom headers key
      // 请根据实际情况修改
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config
  },
  error => {
    // 处理请求错误
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// 相应拦截器
service.interceptors.response.use(
  /**
   * 如果你想要获取http信息，例如头信息或状态信息
   * Please return  response => response
   */

  /**
   * 通过自定义代码确定请求状态
   * Here is just an example
   * 您也可以通过HTTP状态码来判断状态
   */
  response => {
    const data = response.data
    if (data.success) {
      // 操作成功
      // Message({
      //   message: data.message || 'Error',
      //   type: 'success',
      //   duration: 2 * 1000
      // })
      return data
    } else {
      // 操作失败
      Message({
        message: data.message || 'Error',
        type: 'error',
        duration: 2 * 1000
      })
      return Promise.reject(new Error('操作失败'))
    }
  },
  async error => {
    // 返回执行错误，让当前的指向链跳出成功 之间竟然 catch
    if (error.response.data.code === 10002) {
      console.log('token失效')
      // 退出登录
      await store.dispatch('user/userLoginut')

      console.log(router.currentRoute.fullPath)
      // encodeURIComponent 对字符串进行编码
      router.push(
        `/login?redirect=${encodeURIComponent(router.currentRoute.fullPath)}`
      )
    }
    return Promise.reject(error)
  }
)

export default service
